#!/bin/bash

# 颜色设置
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 错误处理函数
error_exit() {
    echo -e "${RED}Error: $1${NC}" 1>&2
    exit 1
}

# 分隔符函数
separator() {
    echo -e "${BLUE}------------------------------------------------${NC}"
}

# 脚本说明
separator
echo -e "${GREEN}此脚本用于在 CentOS 7.6 上安装 Docker CE 和 Docker Compose${NC}"
echo -e "${GREEN}请注意：此脚本仅供「云算2210」实验学习使用，请勿用于生产环境。${NC}"
separator

# 脚本作用和操作介绍
echo -e "${GREEN}脚本的功能：${NC}"
echo -e "${GREEN}1. 检查系统中是否已安装 Docker。如果已安装，则显示 Docker 版本信息并检查 Docker Compose 的安装情况。${NC}"
echo -e "${GREEN}2. 如果未安装Docker，脚本将执行以下操作：${NC}"
echo -e "${GREEN}   a. 安装必要的软件包${NC}"
echo -e "${GREEN}   b. 添加Docker的yum仓库${NC}"
echo -e "${GREEN}   c. 更新yum缓存${NC}"
echo -e "${GREEN}   d. 安装Docker CE${NC}"
echo -e "${GREEN}   e. 启动Docker服务${NC}"
echo -e "${GREEN}   f. 将Docker服务设置为开机启动${NC}"
echo -e "${GREEN}   g. 验证Docker安装并显示版本信息${NC}"
echo -e "${GREEN}3. 检查Docker Compose的安装情况，未安装时询问用户是否安装并根据用户选择执行安装${NC}"
separator

# 检查Docker是否已安装
separator
echo -e "${GREEN}检查Docker是否已安装...${NC}"
separator
if command -v docker &> /dev/null
then
    docker_version=$(docker --version)
    echo -e "${GREEN}Docker已安装，版本信息：$docker_version${NC}"
else
    echo -e "${GREEN}Docker未安装，开始安装...${NC}"

    # 安装必要的软件包
    separator
    echo -e "${GREEN}1. 安装必要的软件包...${NC}"
    separator
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2 || error_exit "安装必要的软件包失败。"
    echo -e "${GREEN}必要的软件包安装完成。${NC}"

    # 添加Docker的yum仓库
    separator
    echo -e "${GREEN}2. 添加Docker的yum仓库...${NC}"
    separator
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo || error_exit "添加Docker的yum仓库失败。"
    echo -e "${GREEN}Docker的yum仓库添加完成。${NC}"

    # 更新yum缓存
    separator
    echo -e "${GREEN}3. 更新yum缓存...${NC}"
    separator
    sudo yum makecache fast || error_exit "更新yum缓存失败。"
    echo -e "${GREEN}yum缓存更新完成。${NC}"

    # 安装Docker CE
    separator
    echo -e "${GREEN}4. 安装Docker CE...${NC}"
    separator
    sudo yum install -y docker-ce || error_exit "安装Docker CE失败。"
    echo -e "${GREEN}Docker CE安装完成。${NC}"

    # 启动Docker服务
    separator
    echo -e "${GREEN}5. 启动Docker服务...${NC}"
    separator
    sudo systemctl start docker || error_exit "启动Docker服务失败。"
    echo -e "${GREEN}Docker服务启动完成。${NC}"

    # 将Docker服务设置为开机启动
    separator
    echo -e "${GREEN}6. 将Docker服务设置为开机启动...${NC}"
    separator
    sudo systemctl enable docker || error_exit "设置Docker服务开机启动失败。"
    echo -e "${GREEN}Docker服务设置为开机启动完成。${NC}"

    # 验证Docker安装
    separator
    echo -e "${GREEN}7. 验证Docker安装...${NC}"
    separator
    docker_version=$(sudo docker --version) || error_exit "验证Docker安装失败。"
    echo -e "${GREEN}Docker安装成功，版本信息：$docker_version${NC}"

    separator
    echo -e "${GREEN}所有操作已完成，Docker CE已成功安装并启动。${NC}"
    separator
fi

# 检查Docker Compose是否已安装
separator
echo -e "${GREEN}检查Docker Compose是否已安装...${NC}"
separator
if command -v docker-compose &> /dev/null
then
    compose_version=$(docker-compose --version)
    echo -e "${GREEN}Docker Compose已安装，版本信息：$compose_version${NC}"
else
    read -p "是否安装Docker Compose? (y/n): " install_compose < /dev/tty
    separator
    if [[ $install_compose == "y" || $install_compose == "Y" ]]
    then
        echo -e "${GREEN}安装Docker Compose...${NC}"
        separator
        sudo yum -y install epel-release || error_exit "安装epel-release失败。"
        sudo yum -y install python3-pip || error_exit "安装python3-pip失败。"
        pip3 install --upgrade pip || error_exit "升级pip失败。"
        pip3 install docker-compose || error_exit "安装Docker Compose失败。"
        compose_version=$(docker-compose --version)
        echo -e "${GREEN}Docker Compose安装完成，版本信息：$compose_version${NC}"
    else
        echo -e "${GREEN}跳过Docker Compose安装。${NC}"
    fi
fi

separator
echo -e "${GREEN}脚本执行完毕。${NC}"
separator
